static void
_gtk_style_cascade_init (GtkStyleCascade *cascade)
{
+ cascade->scale = 1;
+
cascade->providers = g_array_new (FALSE, FALSE, sizeof (GtkStyleProviderData));
g_array_set_clear_func (cascade->providers, style_provider_data_clear);
}
}
}
+void
+_gtk_style_cascade_set_scale (GtkStyleCascade *cascade,
+ int scale)
+{
+ g_return_if_fail (GTK_IS_STYLE_CASCADE (cascade));
+
+ if (cascade->scale == scale)
+ return;
+
+ cascade->scale = scale;
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (cascade));
+}
+
+int
+_gtk_style_cascade_get_scale (GtkStyleCascade *cascade)
+{
+ g_return_val_if_fail (GTK_IS_STYLE_CASCADE (cascade), 1);
+
+ return cascade->scale;
+}
GtkStyleCascade *parent;
GArray *providers;
+ int scale;
};
struct _GtkStyleCascadeClass
void _gtk_style_cascade_set_parent (GtkStyleCascade *cascade,
GtkStyleCascade *parent);
+void _gtk_style_cascade_set_scale (GtkStyleCascade *cascade,
+ int scale);
+int _gtk_style_cascade_get_scale (GtkStyleCascade *cascade);
void _gtk_style_cascade_add_provider (GtkStyleCascade *cascade,
GtkStyleProvider *provider,
GtkCssNode *cssnode;
GSList *saved_nodes;
GArray *property_cache;
- gint scale;
guint frame_clock_update_id;
GdkFrameClock *frame_clock;
parent_changes,
GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
&matcher,
- priv->scale,
+ _gtk_style_cascade_get_scale (priv->cascade),
parent);
gtk_widget_path_free (path);
if (_gtk_css_matcher_init (&matcher, path))
style = gtk_css_static_style_new_compute (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
&matcher,
- priv->scale,
+ _gtk_style_cascade_get_scale (priv->cascade),
parent);
else
style = gtk_css_static_style_new_compute (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
NULL,
- priv->scale,
+ _gtk_style_cascade_get_scale (priv->cascade),
parent);
gtk_widget_path_free (path);
gtk_style_context_set_scale (GtkStyleContext *context,
gint scale)
{
+ GtkStyleContextPrivate *priv;
+
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
- if (context->priv->scale == scale)
+ priv = context->priv;
+
+ if (scale == _gtk_style_cascade_get_scale (priv->cascade))
return;
- context->priv->scale = scale;
+ if (priv->cascade == _gtk_settings_get_style_cascade (gtk_settings_get_for_screen (priv->screen)))
+ {
+ GtkStyleCascade *new_cascade;
+
+ new_cascade = _gtk_style_cascade_new ();
+ _gtk_style_cascade_set_parent (new_cascade, priv->cascade);
+ gtk_style_context_set_cascade (context, new_cascade);
+ g_object_unref (new_cascade);
+ }
- _gtk_style_context_queue_invalidate (context, GTK_CSS_CHANGE_SOURCE);
+ _gtk_style_cascade_set_scale (priv->cascade, scale);
}
/**
{
g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), 0);
- return context->priv->scale;
+ return _gtk_style_cascade_get_scale (context->priv->cascade);
}
/**
priv->parent ? gtk_style_context_lookup_style (priv->parent) : NULL,
timestamp,
GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
- priv->scale,
+ _gtk_style_cascade_get_scale (priv->cascade),
gtk_style_context_should_create_transitions (context, current) ? current : NULL);
gtk_style_context_clear_cache (context);